Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>STREAMS</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/STREAMS"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-STREAMS rootpage-STREAMS skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">STREAMS</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">For other uses, see <a href="Stream_(disambiguation)" class="mw-disambig" title="Stream (disambiguation)">Stream (disambiguation)</a>.</div>
<p>In <a href="Computer_network" title="Computer network">computer networking</a>, <b>STREAMS</b> is the native framework in <a href="UNIX_System_V" title="UNIX System V">Unix System V</a> for implementing <a href="Character_device" class="mw-redirect" title="Character device">character device</a> drivers, network protocols, and <a href="Inter-process_communication" title="Inter-process communication">inter-process communication</a>. In this framework, a stream is a chain of <a href="Coroutine" title="Coroutine">coroutines</a> that <a href="Message_passing" title="Message passing">pass messages</a> between a program and a <a href="Device_driver" title="Device driver">device driver</a> (or between a pair of programs). STREAMS originated in Version 8 <a href="Research_Unix" title="Research Unix">Research Unix</a>, as Streams (not capitalized).
</p><p>STREAMS's design is a modular architecture for implementing full-duplex <a href="Input/output" title="Input/output">I/O</a> between kernel and device drivers. Its most frequent uses have been in developing terminal I/O (<a href="Line_discipline" title="Line discipline">line discipline</a>) and networking subsystems. In System V Release 4, the entire terminal interface was reimplemented using STREAMS.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> An important concept in STREAMS is the ability to push drivers&nbsp;– custom code modules which can modify the functionality of a network interface or other device&nbsp;– together to form a stack. Several of these drivers can be chained together in order.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="History">History</h2></div>
<p>STREAMS was based on the Streams I/O subsystem introduced in the <a href="Version_8_Unix" class="mw-redirect" title="Version 8 Unix">Eighth Edition Research Unix</a> (V8) by <a href="Dennis_Ritchie" title="Dennis Ritchie">Dennis Ritchie</a>, where it was used for the terminal <a href="Input/output" title="Input/output">I/O</a> subsystem and the <a href="Internet_protocol_suite" title="Internet protocol suite">Internet protocol suite</a>. This version, not yet called STREAMS in capitals, fit the new functionality under the existing device I/O system calls (<i>open</i>, <i>close</i>, <i>read</i>, <i>write</i>, and <i>ioctl</i>),<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> and its application was limited to terminal I/O and protocols providing pipe-like I/O semantics.
</p><p>This I/O system was ported to System V Release 3 by Robert Israel, Gil McGrath, Dave Olander, Her-Daw Che, and Maury Bach as part of a wider framework intended to support a variety of transport protocols, including TCP, ISO Class 4 transport, SNA LU 6.2, and the AT&amp;T NPACK protocol (used in <a href="Remote_File_Sharing" title="Remote File Sharing">RFS</a>).<sup id="cite_ref-Goodheart_1994_17_3-0" class="reference"><a href="#cite_note-Goodheart_1994_17-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> It was first released with the Network Support Utilities (NSU) package of UNIX System V Release 3.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> This port added the <i>putmsg</i>, <i>getmsg</i>, and <i>poll</i> <a href="System_call" title="System call">system calls</a>, which are nearly equivalent in purpose to the <i>send</i>, <i>recv</i>, and <i><a href="Select_(Unix)" title="Select (Unix)">select</a></i> calls from Berkeley sockets. The <i>putmsg</i> and <i>getmsg</i> system calls were originally called <i>send</i> and <i>recv</i>,<sup id="cite_ref-ritchie_5-0" class="reference"><a href="#cite_note-ritchie-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> but were renamed to avoid namespace conflict.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> In System V Release 4, STREAMS was extended and used for the terminal I/O framework and pipes, providing useful new functionality like bidirectional pipes and <a href="File_descriptor" title="File descriptor">file descriptor</a> passing.<sup id="cite_ref-Goodheart_1994_17_3-1" class="reference"><a href="#cite_note-Goodheart_1994_17-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> A port for <a href="UNICOS" title="UNICOS">UNICOS</a> was also produced. <a href="Eric_S._Raymond" title="Eric S. Raymond">Eric S. Raymond</a> quotes Ritchie as saying about the complexity of System V STREAMS when compared to his V8 Streams that "Streams means something different when shouted".<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup>
</p><p>Concurrent with the System V Release 3 port, <a href="AT%26T_Corporation" title="AT&amp;T Corporation">AT&amp;T</a> developed protocol-independent STREAMS message passing guidelines for the <a href="Link_layer" title="Link layer">link</a>,<sup id="cite_ref-harv|DLPI|2.0.0_8-0" class="reference"><a href="#cite_note-harv|DLPI|2.0.0-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup> <a href="Network_layer" title="Network layer">network</a>,<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> and <a href="Transport_layer" title="Transport layer">transport layers</a><sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup> of the <a href="OSI_model" title="OSI model">OSI model</a> (layers 2-4). Due to the typically close implementation coupling of the network and transport protocols in a given <a href="Protocol_stack" title="Protocol stack">protocol stack</a>, and the typical practice of implementing layers 5-7 outside of the <a href="Kernel_(operating_system)" title="Kernel (operating system)">kernel</a>, only the <a href="Link_layer" title="Link layer">link</a><sup id="cite_ref-harv|DLPI|2.0.0_8-1" class="reference"><a href="#cite_note-harv|DLPI|2.0.0-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup> and <a href="Transport_layer" title="Transport layer">transport layer</a><sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup> STREAMS service interfaces were later standardized by <a href="X/Open" title="X/Open">X/Open</a>. In conjunction with the transport message passing model, the <a href="Transport_Layer_Interface" title="Transport Layer Interface">Transport Layer Interface</a> (later adopted as the <a href="X/Open_Transport_Interface" title="X/Open Transport Interface">X/Open Transport Interface</a>) was defined to provide a transport protocol-independent API for application development. Also, a library supporting the <a href="Session_layer" title="Session layer">session</a>, <a href="Presentation_layer" title="Presentation layer">presentation</a> and <a href="Application_layer" title="Application layer">application layers</a><sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> was defined and later standardized by <a href="The_Open_Group" title="The Open Group">The Open Group</a>.<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup>
</p><p>STREAMS was required for conformance with the <a href="Single_UNIX_Specification" title="Single UNIX Specification">Single UNIX Specification</a> versions 1 (UNIX 95) and 2 (UNIX 98), but as a result of the refusal of the <a href="Berkeley_Software_Distribution" title="Berkeley Software Distribution">BSD</a> and <a href="Linux" title="Linux">Linux</a> developers to provide STREAMS, was marked as optional for POSIX compliance by the <a href="Austin_Group" title="Austin Group">Austin Group</a> in version 3 (UNIX 03). <i>POSIX.1-2008 with TC1</i> (IEEE Std 1003.1, 2013 edition) has designated STREAMS as 'marked obsolescent'<sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup> meaning that said functionality <i>may</i> be removed in a future version of the specification. However, the specific definition of 'obsolescent' used<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup> also says that strictly conforming POSIX applications 'shall not use obsolescent features'.
</p>
<div class="mw-heading mw-heading2"><h2 id="Technical_overview">Technical overview</h2></div>

<p>In <a href="Version_7_Unix" title="Version 7 Unix">Version 7 Unix</a>, a command was connected to a terminal (keyboard and screen, or <a href="Teleprinter" title="Teleprinter">keyboard and printer</a>) through a mechanism called the line discipline, which would buffer a single line of input, i.e., wait for the user to press the <a href="Enter_key" title="Enter key">Return key</a> before sending input to the program for processing; this allowed simple error correction. Streams replaced this with a set of processing modules organized in a linear chain that allowed bidirectional communication between neighboring modules. Programs could "push" a new module onto one end of the chain to change the behavior of a terminal or other character device. Ritchie gives the example chain of a terminal module chained with a <a href="Datakit" title="Datakit">Datakit</a> network module to achieve remote login over a network.<sup id="cite_ref-ritchie_5-1" class="reference"><a href="#cite_note-ritchie-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> Aside from characters (bytes) going from program to device and <i>vice versa</i>, Streams could carry control messages such as "hangup" (drop connection) and <a href="Ioctl" title="Ioctl">ioctl</a> messages.
</p><p>Streams could also be used for <a href="Inter-process_communication" title="Inter-process communication">inter-process communication</a>, by connecting two processes to <a href="Pseudoterminal" title="Pseudoterminal">pseudoterminals</a>. This functionality was implemented in the <i>mpx</i> window system for the <a href="Blit_(computer_terminal)" title="Blit (computer terminal)">Blit</a> graphics terminal, which could display multiple <a href="Terminal_emulator" title="Terminal emulator">terminal emulator</a> windows. Each window was a process that communicated with the window system through a pseudoterminal that had the line discipline driver installed, sending typed characters to it and receiving text (and graphics) to display. Control signals designated the user's wish to switch between windows or close them.<sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-bach_18-0" class="reference"><a href="#cite_note-bach-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: 348–350">: 348–350 </span></sup>
</p><p>The actual Streams modules live in <a href="User_space_and_kernel_space" title="User space and kernel space">kernel space</a> on Unix, and are installed (pushed) and removed (popped) by the ioctl system call. For example, to install the aforementioned line discipline on a <a href="File_descriptor" title="File descriptor">file descriptor</a> <code>fd</code> referring to a terminal device, one would write (in <a href="C_(programming_language)" title="C (programming language)">C</a>):<sup id="cite_ref-bach_18-1" class="reference"><a href="#cite_note-bach-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Page / location: 347">: 347 </span></sup>
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span class="n">ioctl</span><span class="p">(</span><span class="n">fd</span><span class="p">,</span><span class="w"> </span><span class="n">PUSH</span><span class="p">,</span><span class="w"> </span><span class="n">TTYLD</span><span class="p">);</span>
</pre></div>
<p>To perform input/output on a stream, one either uses the <code>read</code> and <code>write</code> system calls as with regular file descriptors, or a set of STREAMS-specific functions to send control messages.<sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup>
</p><p>Ritchie admitted to regretting having to implement Streams in the kernel, rather than as processes, but felt compelled to do so for reasons of efficiency.<sup id="cite_ref-ritchie_5-2" class="reference"><a href="#cite_note-ritchie-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> A later <a href="Plan_9_from_Bell_Labs" title="Plan 9 from Bell Labs">Plan 9</a> implementation did implement modules as user-level processes.<sup id="cite_ref-plan9_20-0" class="reference"><a href="#cite_note-plan9-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Implementations">Implementations</h2></div>
<p>STREAMS has mostly been used in the System V Unix world; however, other implementations exist:
</p>
<ul><li><a href="Plan_9_from_Bell_Labs" title="Plan 9 from Bell Labs">Plan 9</a> originally used a multi-processor variant of Research Unix's Streams. During the transition to the third edition of Plan 9, Streams were further simplified to simple I/O queues.<sup id="cite_ref-plan9_20-1" class="reference"><a href="#cite_note-plan9-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup></li>
<li>An implementation written at <a href="Packeteer" title="Packeteer">Mentat</a> was used in <a href="Novell" title="Novell">Novell</a> <a href="NetWare" title="NetWare">NetWare</a> for its TCP/IP stack, and licensed by <a href="Apple_Inc." title="Apple Inc.">Apple</a> for use in the <a href="Classic_Mac_OS" title="Classic Mac OS">classic Mac OS</a> starting in version 7.5.2, as part of the <a href="Open_Transport" title="Open Transport">Open Transport</a> networking system. (In <a href="MacOS" title="MacOS">macOS</a>, the <a href="Classic_Environment" class="mw-redirect" title="Classic Environment">Classic Environment</a> used the STREAMS architecture, but the native networking architecture uses the <a href="Berkeley_sockets" title="Berkeley sockets">Berkeley sockets</a> API and is derived from the <a href="Berkeley_Software_Distribution" title="Berkeley Software Distribution">BSD</a> networking code.)</li>
<li><a href="FreeBSD" title="FreeBSD">FreeBSD</a> has basic support for STREAMS-related system calls, as required by SVR4 binary compatibility layer.<sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup></li>
<li>The <a href="Windows_NT" title="Windows NT">Windows NT</a> kernel offered a full port of STREAMS as the streams.sys binary. NT DDK even had a chapter on STREAMS, going as late as NT4 though in NT4 DDK it was declared obsolete. The original TCP/IP stack for <a href="Windows_NT_3.1" title="Windows NT 3.1">Windows NT 3.1</a> was implemented atop STREAMS by <a href="Spider_Systems" title="Spider Systems">Spider Systems</a>, and used the streams.sys binary. From NT 3.5 up, TCP/IP was remade completely,<sup id="cite_ref-22" class="reference"><a href="#cite_note-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-23" class="reference"><a href="#cite_note-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup> by adopting the one from Microsoft <a href="LAN_Manager" title="LAN Manager">LAN Manager</a> for <a href="OS/2" title="OS/2">OS/2</a> 1.x.</li>
<li>The AlphaTCP networking layer in AMOS, the operating system for <a href="Alpha_Microsystems" title="Alpha Microsystems">Alpha Micro</a> computers, was also based on <a href="Spider_Systems" title="Spider Systems">SpiderStreams</a>.<sup id="cite_ref-ampm_24-0" class="reference"><a href="#cite_note-ampm-24"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup></li></ul>
<p><a href="Linux_kernel" title="Linux kernel">Linux</a> does not include STREAMS functionality without third-party add-ons. <a href="Caldera_(company)" title="Caldera (company)">Caldera</a> had "pushed" for STREAMS to be included in Linux ca. 1998, to support its Netware for Linux, but it was rejected outright by the Linux kernel developers on technical grounds (mainly performance).<sup id="cite_ref-groklaw_25-0" class="reference"><a href="#cite_note-groklaw-25"><span class="cite-bracket">[</span>25<span class="cite-bracket">]</span></a></sup> The <a href="Compatibility_layer" title="Compatibility layer">compatibility layers</a> in Linux for other operating systems convert STREAMS operations into sockets as early as possible.<sup id="cite_ref-Cox_26-0" class="reference"><a href="#cite_note-Cox-26"><span class="cite-bracket">[</span>26<span class="cite-bracket">]</span></a></sup> The implementation used by Caldera was "LiS", by a company called GCOM; it later figured in the <a href="SCO%E2%80%93Linux_disputes" title="SCO–Linux disputes">legal battles</a> by Caldera's successor, the <a href="SCO_Group" title="SCO Group">SCO Group</a>, against Linux, with SCO claiming that Linux with STREAMS infringed what it believed to be its copyrights to System V.<sup id="cite_ref-groklaw_25-1" class="reference"><a href="#cite_note-groklaw-25"><span class="cite-bracket">[</span>25<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Notes">Notes</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist reflist-columns references-column-width reflist-columns-2">
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text">(<a href="#CITEREFGoodheart1994">Goodheart 1994</a>, pp.&nbsp;51–53, 403–527)</span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text">(<a href="#CITEREFGoodheart1994">Goodheart 1994</a>, pp.&nbsp;52–53)</span>
</li>
<li id="cite_note-Goodheart_1994_17-3"><span class="mw-cite-backlink">^ <a href="#cite_ref-Goodheart_1994_17_3-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Goodheart_1994_17_3-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text">(<a href="#CITEREFGoodheart1994">Goodheart 1994</a>, p.&nbsp;17)</span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text">(<a href="#CITEREFGoodheart1994">Goodheart 1994</a>, p.&nbsp;51)</span>
</li>
<li id="cite_note-ritchie-5"><span class="mw-cite-backlink">^ <a href="#cite_ref-ritchie_5-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-ritchie_5-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-ritchie_5-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text">(<a href="#CITEREFRitchie1984">Ritchie 1984</a>)</span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text">(<a href="#CITEREFGoodheart1994">Goodheart 1994</a>)</span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFEric_S._Raymond2003" class="citation book cs1"><a href="Eric_S._Raymond" title="Eric S. Raymond">Eric S. Raymond</a> (2003). <a rel="nofollow" class="external text" href="http://www.catb.org/esr/writings/taoup/html/ch07s03.html">"Chapter 7. Multiprogramming"</a>. <a href="The_Art_of_Unix_Programming" title="The Art of Unix Programming"><i>The Art of Unix Programming</i></a>. Addison-Wesley.</cite></span>
</li>
<li id="cite_note-harv|DLPI|2.0.0-8"><span class="mw-cite-backlink">^ <a href="#cite_ref-harv|DLPI|2.0.0_8-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-harv|DLPI|2.0.0_8-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text">(<a href="#CITEREFDLPI2.0.0">DLPI &amp; 2.0.0</a>)</span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text">(<a href="#CITEREFNPI2.0.0">NPI &amp; 2.0.0</a>)</span>
</li>
<li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text">(<a href="#CITEREFTPI1.5">TPI &amp; 1.5</a>)</span>
</li>
<li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text">(<a href="#CITEREFTPI2.0.0">TPI &amp; 2.0.0</a>)</span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text">(<a href="#CITEREFAPLI1990">APLI 1990</a>)</span>
</li>
<li id="cite_note-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-13">^</a></b></span> <span class="reference-text">(<a href="#CITEREFXAP1993">XAP 1993</a>)</span>
</li>
<li id="cite_note-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-14">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xsh_chap02.html#tag_22_02_06">"Base Specifications, Issue 7, 2013 Edition, Section B.2.6 STREAMS"</a>. The Open Group<span class="reference-accessdate">. Retrieved <span class="nowrap">9 March</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.opengroup.org/austin/">"The Austin Common Standards Revision Group"</a>. The Open Group<span class="reference-accessdate">. Retrieved <span class="nowrap">9 March</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-16">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://pubs.opengroup.org/onlinepubs/9699919799/help/codes.html#OB">"The Open Group Base Specifications Issue 7, Codes"</a>. The Open Group<span class="reference-accessdate">. Retrieved <span class="nowrap">9 March</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-17">^</a></b></span> <span class="reference-text"><cite id="CITEREFPike1984" class="citation journal cs1"><a href="Rob_Pike" title="Rob Pike">Pike, Rob</a> (1984). <span class="id-lock-subscription" title="Paid subscription required"><a rel="nofollow" class="external text" href="http://doc.cat-v.org/bell_labs/blit/">"The Blit: A Multiplexed Graphics Terminal"</a></span>. <i>AT&amp;T Bell Laboratories Technical Journal</i>. <b>63</b> (8): <span class="nowrap">1607–</span>1631. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1002%2Fj.1538-7305.1984.tb00056.x">10.1002/j.1538-7305.1984.tb00056.x</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a>&nbsp;<a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:34062559">34062559</a>.</cite></span>
</li>
<li id="cite_note-bach-18"><span class="mw-cite-backlink">^ <a href="#cite_ref-bach_18-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-bach_18-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFBach1986" class="citation book cs1">Bach, Maurice J. (1986). <span class="id-lock-registration" title="Free registration required"><a rel="nofollow" class="external text" href="https://archive.org/details/designofunixoper00bach"><i>The Design of the UNIX Operating System</i></a></span>. Prentice Hall. <a href="Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/1986duos.book.....B">1986duos.book.....B</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>9780132017992</bdi>.</cite></span>
</li>
<li id="cite_note-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-19">^</a></b></span> <span class="reference-text">See: <span class="neverexpand"><code><a rel="nofollow" class="external text" href="https://www.opengroup.org/onlinepubs/009695399/functions/putmsg.html">putmsg</a></code></span>&nbsp;–&nbsp;System Interfaces Reference, <a href="Single_Unix_Specification" class="mw-redirect" title="Single Unix Specification">The Single UNIX Specification</a>, Version 3 from <a href="The_Open_Group" title="The Open Group">The Open Group</a>, and <span class="neverexpand"><code><a rel="nofollow" class="external text" href="https://www.opengroup.org/onlinepubs/009695399/functions/getmsg.html">getmsg</a></code></span>&nbsp;–&nbsp;System Interfaces Reference, <a href="Single_Unix_Specification" class="mw-redirect" title="Single Unix Specification">The Single UNIX Specification</a>, Version 3 from <a href="The_Open_Group" title="The Open Group">The Open Group</a>.</span>
</li>
<li id="cite_note-plan9-20"><span class="mw-cite-backlink">^ <a href="#cite_ref-plan9_20-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-plan9_20-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFPresotto1990" class="citation conference cs1">Presotto, David L. (1990). <i>Multiprocessor streams for Plan 9</i>. Proc. UKUUG Summer Conf. <a href="CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a>&nbsp;<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.42.1172">10.1.1.42.1172</a></span>.</cite></span>
</li>
<li id="cite_note-21"><span class="mw-cite-backlink"><b><a href="#cite_ref-21">^</a></b></span> <span class="reference-text"><cite id="CITEREFNewton" class="citation web cs1">Newton, Mark. <a rel="nofollow" class="external text" href="https://people.freebsd.org/~newton/freebsd-svr4/">"FreeBSD SysVR4 Emulation"</a>. <i>Mark Newton's FreeBSD pages</i>.</cite></span>
</li>
<li id="cite_note-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-22">^</a></b></span> <span class="reference-text">(<a href="#CITEREFBarr2001">Barr 2001</a>)</span>
</li>
<li id="cite_note-23"><span class="mw-cite-backlink"><b><a href="#cite_ref-23">^</a></b></span> <span class="reference-text">(<a href="#CITEREFValentine2001">Valentine 2001</a>)</span>
</li>
<li id="cite_note-ampm-24"><span class="mw-cite-backlink"><b><a href="#cite_ref-ampm_24-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://ampm.floodgap.com/www/amos.htm">"Alpha Micro Phun Machine: Primer to AMOS"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">5 March</span> 2022</span>.</cite></span>
</li>
<li id="cite_note-groklaw-25"><span class="mw-cite-backlink">^ <a href="#cite_ref-groklaw_25-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-groklaw_25-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.groklaw.net/article.php?story=2006070309564374">"STREAMS, LiS, and Caldera's Netware for Linux - Updated"</a>. <i><a href="Groklaw" title="Groklaw">Groklaw</a></i>. 3 July 2006<span class="reference-accessdate">. Retrieved <span class="nowrap">14 July</span> 2022</span>.</cite></span>
</li>
<li id="cite_note-Cox-26"><span class="mw-cite-backlink"><b><a href="#cite_ref-Cox_26-0">^</a></b></span> <span class="reference-text">Alan Cox, <a rel="nofollow" class="external text" href="https://lkml.org/lkml/1998/6/28/138">Streams and Linux</a>, Linux Kernel Mailing List, 28 June 1998</span>
</li>
</ol></div>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<ul><li><cite id="CITEREFGoodheart1994" class="citation cs2">Goodheart, Berny; Cox, James (1994), <i>The magic garden explained: the internals of UNIX System V Release 4, an open-systems design</i>, Australia: Prentice Hall, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>0-13-098138-9</bdi></cite></li>
<li><cite id="CITEREFTPI2.0.0" class="citation cs2">Open Group (1999), "Transport Provider Interface (TPI) Specification", <i>Open Group CAE Specification</i> (Revision 2.0.0, Draft 2&nbsp;ed.), Berkshire, UK: Open Group Publication</cite></li>
<li><cite id="CITEREFXAP1993" class="citation cs2">Open Group (September 1993), "ACSE/Presentation Services API (XAP)", <i>X/Open CAE Specification</i>, vol.&nbsp;XAP, no.&nbsp;c303, Berkshire, UK: X/Open Company Limited, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>1-872630-91-X</bdi></cite></li>
<li><cite id="CITEREFPajari1992" class="citation cs2">Pajari, George (1992) [1991], <a rel="nofollow" class="external text" href="https://archive.org/details/writingunixdevic00paja_0"><i>Writing UNIX Device Drivers</i></a> (2nd Printing, 1st&nbsp;ed.), Reading, MA: Addison-Wesley, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>0-201-52374-4</bdi></cite></li>
<li><cite id="CITEREFRitchie1984" class="citation journal cs1"><a href="Dennis_Ritchie" title="Dennis Ritchie">Ritchie, Dennis M.</a> (October 1984). <span class="id-lock-subscription" title="Paid subscription required"><a rel="nofollow" class="external text" href="https://www.bell-labs.com/usr/dmr/www/st.html">"A Stream Input-Output System"</a></span>. <i>AT&amp;T Bell Laboratories Technical Journal</i>. <b>63</b> (8 Part 2). AT&amp;T: <span class="nowrap">1897–</span>1910. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1002%2Fj.1538-7305.1984.tb00071.x">10.1002/j.1538-7305.1984.tb00071.x</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a>&nbsp;<a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:33497669">33497669</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2018-01-13</span></span>.</cite></li>
<li><cite id="CITEREFStevens1993" class="citation cs2">Stevens, W. Richard (1993), <a rel="nofollow" class="external text" href="https://archive.org/details/advancedprogramm00stev"><i>Advanced Programming in the UNIX Environment</i></a> (15th Printing, 1st&nbsp;ed.), Reading, MA: Addison-Wesley, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>0-201-56317-7</bdi></cite></li>
<li><cite id="CITEREFThomas1986" class="citation cs2">Thomas, Rebecca; Rogers, Lawrence R.; Yates, Jean L. (1986), <i>Advanced Programmers Guide to UNIX System V</i>, Berkeley, CA: Osborne McGraw-Hill, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>0-07-881211-9</bdi></cite></li>
<li><cite id="CITEREFDLPI2.0.0" class="citation cs2">UNIX International (August 20, 1991), <a rel="nofollow" class="external text" href="http://www.openss7.org/docs/dlpi.pdf"><i>Data Link Provider Interface (DLPI) Specification</i></a> <span class="cs1-format">(PDF)</span>, UNIX International Publication (Revision 2.0.0, Draft 2&nbsp;ed.), Parsippany, N.J.: UNIX International Press<span class="reference-accessdate">, retrieved <span class="nowrap">2009-07-27</span></span></cite></li>
<li><cite id="CITEREFNPI2.0.0" class="citation cs2">UNIX International (August 17, 1992), <a rel="nofollow" class="external text" href="http://www.openss7.org/docs/npi.pdf"><i>Network Provider Interface (NPI) Specification</i></a> <span class="cs1-format">(PDF)</span>, UNIX International Publication (Revision 2.0.0, Draft 2&nbsp;ed.), Parsippany, N.J.: UNIX International Press<span class="reference-accessdate">, retrieved <span class="nowrap">2009-07-27</span></span></cite></li>
<li><cite id="CITEREFTPI1.5" class="citation cs2">UNIX International (December 10, 1992), <a rel="nofollow" class="external text" href="http://www.openss7.org/docs/tpi.pdf"><i>Transport Provider Interface Specification</i></a> <span class="cs1-format">(PDF)</span>, UNIX International Publication (Revision 1.5, Draft 2&nbsp;ed.), Parsippany, N.J.: UNIX International Press<span class="reference-accessdate">, retrieved <span class="nowrap">2009-07-27</span></span></cite></li>
<li><cite id="CITEREFAPLI1990" class="citation cs2">UNIX International (October 25, 1990), <i>ACSE/Presentation Library Interface (APLI) Specification</i>, UNIX International Publication (Draft&nbsp;ed.), Parisppany, N.J.: UNIX International Press</cite></li>
<li><cite id="CITEREFWaite_Group1987" class="citation cs2">Waite Group (1987), Mitchel Waite (ed.), <a rel="nofollow" class="external text" href="https://archive.org/details/unixpapers00wait"><i>UNIX Papers</i></a> (2nd Printing, 1st&nbsp;ed.), Indianapolis, IN: Howard W. Sams &amp; Company, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>0-672-22578-6</bdi></cite></li>
<li><cite id="CITEREFBarr2001" class="citation cs2">Barr, Adam (June 19, 2001), <a rel="nofollow" class="external text" href="http://www.kuro5hin.org/story/2001/6/19/05641/7357">"Microsoft, TCP/IP, Open Source, and Licensing"</a>, <i><a href="Kuro5hin" title="Kuro5hin">Kuro5hin</a></i><span class="reference-accessdate">, retrieved <span class="nowrap">February 22,</span> 2013</span></cite></li>
<li><cite id="CITEREFValentine2001" class="citation mailinglist cs1">Valentine, Mark (June 19, 2001). <a rel="nofollow" class="external text" href="http://www.mail-archive.com/freebsd-hackers@freebsd.org/msg24126.html">"Re: Query: How to tell if Microsoft is using BSD TCP/IP code?"</a>. <i>freebsd-hackers</i> (Mailing list)<span class="reference-accessdate">. Retrieved <span class="nowrap">February 22,</span> 2013</span>.</cite></li></ul>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><a rel="nofollow" class="external text" href="http://man.cat-v.org/unix_8th/4/stream">The original stream(4) manual from Unix 8th Edition</a></li>
<li><a rel="nofollow" class="external text" href="https://web.archive.org/web/20110726053318/http://alpha-supernova.dev.filibeto.org/lib/rel/4.0B/HTML/AA-PS2WD-TET1_html/netprog6.html">The STREAMS framework in Digital UNIX</a>&nbsp;– from the Digital UNIX Network Programmer's Guide</li>
<li><a rel="nofollow" class="external text" href="https://docs.oracle.com/cd/E19683-01/806-6546/">Oracle (formerly, Sun) STREAMS Programming Guide</a></li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-07-02" href="https://en.wikipedia.org/wiki/?title=STREAMS&amp;oldid=1298468936">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>